package com.zmn.oms.model.dto.work.masterwork;

import com.zmn.consts.GlobalConsts;
import com.zmn.oms.common.constant.DiscountConsts;
import com.zmn.oms.common.dro.quotation3.FaultDRO;
import com.zmn.oms.model.dto.orderattachment.OrderAttachmentAuditDTO;
import com.zmn.oms.model.dto.pay.AmountDTO;
import com.zmn.oms.model.dto.visit.OrderVisitDTO;
import com.zmn.oms.model.entity.discount.OrderDiscount;
import com.zmn.oms.model.entity.fcorderpart.OrderFactoryPart;
import com.zmn.oms.model.entity.log.OrderLog;
import com.zmn.oms.model.entity.part.OrderPart;
import com.zmn.oms.model.entity.product.OrderProduct;
import com.zmn.oms.model.entity.product.OrderProductExtend;
import com.zmn.oms.model.entity.serviceitem.OrderServiceItem;
import com.zmn.oms.model.entity.warranty.OrderWarranty;
import com.zmn.oms.model.entity.warranty.OrderWarrantyProduct;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 类描述：
 *
 * @author xiangyang
 * @date 2018/12/20 20:14
 */
@Data
public class WorkDetailDTO implements Serializable {
    /*基本信息*/
    private Long orderId;                                // 订单id
    private Long workId;                                 // 工单id
    private Integer platWork;                            // 做单平台标志：1.言而有信 2.啄木鸟
    private Integer companyId;                           // 公司id
    private Integer manageCompanyId;                     // 服务公司id
    private Integer type;                                // 订单类型：1 新单、2 返修单、3 退款单
    private Integer grabType;                            // 抢单类型：1指派，2抢单
    private Integer status;                              // 工单状态
    private Integer resultStatus;                        // 结果
    private Date dutyTime;                               // 预约时间
    private Date dutyTimeEnd;                               // 预约时间-结束时间（动态库存）
    private String distributorTel;                       // 派单电话
    private Integer servCategId;                         // 服务类型id
    private String servCategName;                        // 服务类型名称 清洗、维修等
    private Integer categOneId;                          // 产品一级分类id
    private Integer categId;                             // 产品二级分类id
    private Integer showCategOneId;                      // 前台产品一级分类id
    private Integer showCategId;                         // 前台产品二级分类id
    private Integer productId;                           // 产品id
    private Integer showProductId;                       // 前台产品id
    private Integer tariffId;                            // 价格表id
    private String productInfo;                          // 产品名称
    private String fault;                                // 故障描述
    private String remark;                               // 工单备注
    private String channelName;                          // 渠道名称
    private String channelDesc;                          // 渠道说明
    private Integer channelId;                           // 渠道id
    private Integer factoryId;                          // 厂商id
    private String factoryDesc;                          // 厂商说明
    private String techPhone;                            // 厂商技术电话
    private String userName;                             // 客户名称
    private String contactName;                          // 联系人姓名
    private String telephone;                            // 客户电话1
    private String telephone2;                           // 客户电话2
    private String telephone3;                           // 客户电话3
    private Integer bindStatus;                          // 绑定状态
    private String bindMasterMobile;                    // 师傅绑定时所用手机号
    private Integer provinceId;                          // 省id
    private String provinceName;                         // 省名称
    private Integer cityId;                              // 市id
    private String cityName;                             // 市名称
    private Integer countyId;                            // 区id
    private String countyName;                           // 区名称
    private String street;                               // 街道
    private String address;                              // 客户地址
    private Double longitude;                            // 经度
    private Double latitude;                             // 纬度
    private Integer bizType;                             // 订单业务类型：1保外业务（C），2保内业务（F），3工程业务（B）
    private Integer bizLine;                             // 业务线
    private String manualCode;                           // 保单号
    private Integer sourceType;                          // 来源类型：1普通 2厂商 3大客户
    private Integer member;          	                 // 会员标识：1 非， 2 是
    private Integer standardPrice;                       // 标准收费标识 ：1 非， 2 是
    private Integer finalPrice;                          // 一口价标识 ：1 非， 2 是
    private Integer delivery;                            // 是否需要拉修（1：不需要，2：需要）
    private Integer waitPart;                            // 是否待件（1：否，2：是）
    private Integer reviewFlag;                          // 是否需要工程师审核 1：否 2：是
    private Integer vasReviewStatus;                     // 特权订单审核状态 审核状态 1 待工程师审核 2工程师审核失败  3 待后台审核 4 后台审核成功 5 后台审核失败
    private String memberServiceNumber;                  // 全家享会员客服电话
    private Integer memberOrderOperationDistance;        // 全家享会员单可以操作的距离,单位米
    private Integer needSecurityCode;                    // 需要完成码标志，1：否，2：是
    private Integer discountFlag;                        // 能否优惠标志，1：否，2：是
    private Double discountValue;                        // 优惠折扣值
    private Integer originalAmount;                      // 订单金额
    private Integer totalAmount;                         // 订单收入
    private Integer masterAmount;                        // 工程师收款金额
    private Integer prepayAmount;                        // 预付款
    private Integer channelPrepayAmount;                 // 渠道预付款
    private Integer depositAmount;                       // 定金
    private Integer depositStatus;                       // 定金支付状态：1未支付，2已支付，3退款
    private Integer progressAmount;                      // 进度款
    private Integer progressStatus;                      // 进度款-支付状态
    private Integer discountAmount;                      // 优惠总金额
    private Integer onlyVisit;                           // 只收上门费标志（1：否，2：是）
    private Integer partUse;                             // 配件使用标志 1 未用配件，2 使用配件
    private Integer partRetain;                          // 是否保留配件申请 1 不保留，2 保留
    private Integer needSelectWarrantyFault;             // 是否需要选择保修卡故障（1：否，2：是）
    private Integer fixPrice;                            // 是否固定价格（1：否，2：是）
    private Integer supportSaleMember;                   // 是否支持销售全家享会员（1：否，2：是）
    private Integer supportSingleMemberRegister;         // 是否支持单品会员注册（1：否，2：是）
    private String memberProductName;                    // 会员产品名称
    private Integer warrantyMember;                      // 是否支持保修卡质保会员（1：否，2：是）
    private Integer needApplique;                        // 是否需要贴花照片（1：否，2：是）
    private Integer waitPartsPost;                       // 邮寄旧件  1：否 2：是
    private Integer waitFactoryReview;                   // 是否有配件等待厂家审核 1：否 2：是
    private Integer needConsumeCoupon;                   // 是否需要验券 1：否 2：是
    private Integer enableDistribute;                    // 是否允许转派 1：否 2：是
    private Integer highValueUser;                       // 高价值用户   1：否 2：是
    private Integer servItemType;                        // 服务项类型，目前仅支持两种类型： 1.工单服务项 2.故障服务项
    private Long visitUserId;                            // 上门用户（前置用户Id）
    private Long userId;                                // 下单用户Id
    private Integer replenishVasFlag;                   // 补全增值服务订单
    private Long replenishVasOrderId;                   // 补全增值服务订单ID

    private Integer partReimburse;        // 是否需要报销配件 1,不需报销 2,需报销
    private Integer partReimburseAmount;  // 配件报销金额
    private Integer partReimburseStatus;  // 配件报销状态 1.无需报销、2.待报销、3.报销成功、4.报销失败
    private Date partReimburseTime;       // 报销时间

    private Integer billAmount;           // 工程师绩效基数
    private Integer subsidyAmount;        // 补贴金额
    private Integer rewardAmount;         // 提成金额
    private String outerId;               // 外部工单号
    private Integer verification;         // 勤鸽核销状态
    private Integer isLeave;            // 1未出发 2已出发
    private Integer showTips;// 是否展示提示信息，默认0: 1 不需要展示 2 需要展示
    private Integer zhimiServiceType;   // 智米订单服务类型，该字段仅当订单为智米订单时有效
    private Integer grantStatus; // 是否领取保修卡 1,未领取 2 领取
    private Integer userOperationQuotation; // 是否用户操作报价 （1：否，2：是）
    private Integer haveConfirmQuotation;// 是否有过确认过报价 1.否 2 是
    private Date contactTime;            // 联系时间
    private Long recommenderId; // 推荐人id
    private Integer recommenderType; // 推荐人类型 3 工程师
    private Integer masterId; // 工程师ID

    /**
     * 服务完成审核状态 1.待审核 2. 审核成功 3. 审核失败
     */
    private Integer serviceCompleteReviewStatus;

    /**
     * 服务完成审核失败原因
     */
    private String serviceCompleteReviewReason;

    /**
     * 下单业务模式：1平台，自营
     * @see GlobalConsts#BIZ_MODE_PLAT
     */
    private Integer bizModeSource;

    /**
     * 是否可以收订单
     * 1 不显示， 2 显示
     */
    private Integer showDepositGate;

    /**
     * 是否显示房屋检修入口
     * 1 不显示， 2 显示
     */
    private Integer showHousingGate;

    private Integer discountActivityId; // 活动id(迟到补偿活动id)， >0 表示符合迟到补偿配置，前端显示准时宝

    /*迟到补偿金额。 不为空，表示有迟到补偿金额*/
    private Integer lateAmount;

    /*VIP渠道*/
    private Integer vipChannel;

    /*贴花照片*/
    private List<String> appliqueSrcList;

    /*贴花照片审核信息*/
    private OrderAttachmentAuditDTO appliqueAuditInfo;

    /*工程师拍照*/
    private List<String> imageSrcList;

    /*工程师工作照*/
    private List<String> masterSrcList;

    /*主管联系方式*/
    private List<MasterManagerDTO> managers;

    /*产品列表*/
    private List<OrderProduct> productList;

    /*产品列表展开*/
    private List<OrderProductExtend> orderProductExtends;

    /*优惠项列表*/
    private List<OrderDiscount> orderDiscountList;

    /*优惠券优惠金额*/
    private Integer orderCoupDiscountAmount;

    /*已选服务项列表*/
    private List<OrderServiceItem> orderServiceItemList;

    /*已选配件列表*/
    private List<OrderPart> orderPartList;

    /*保修卡*/
    private OrderWarranty orderWarranty;

    /*已选保修列表*/
    private List<OrderWarrantyProduct> orderWarrantyProductList;

    /*操作日志*/
    private List<OrderLog> orderLogList;

    /*返修原单信息*/
    private ReworkDetailDTO reworkDetail;

    /*厂商审核成功配件*/
    private List<OrderFactoryPart> reviewSuccessParts;

    /*是否支持点评验券*/

    /*京东售后价格表*/

    /**
     * 分润预估
     */
    private WorkSharingEstimateDTO sharingEstimate;

    /*失败原因*/
    private String failReason;

    /*取消类型*/
    private List<String> failReasonList;

    /*限制完成时间*/
    private Integer maxServiceMinutes;

    /*是否三日无忧退工单*/
    private Integer allowRefund;

    /**
     * 工单日程
     */
    private WorkProgrammeDTO programme;

    /**
     * 是否待取消（1：否，2：是）
     */
    private Integer waitCancel;

    /**
     * 申请取消时间
     */
    private Date cancelApplyTime;

    /**
     * 申请取消原因
     */
    private String cancelApplyRemark;

    /**
     * 申请取消备注
     */
    private String cancelApplyContent;

    /**
     * 申请取消提示
     */
    private String cancelApplyTips;

    /**
     * 自动取消时间 (用户取消申请超时系统自动取消时间)
     */
    private Date autoCancelTime;

    /**
     * 申请取消人类型
     */
    private Integer cancelApplyUserType;

    /**
     * 展示待取消详情模块
     */
    private boolean showWaitCancelModule;

    /**
     * 服务完成时间
     */
    private Date serviceCompleteTime;

    /**
     * 算账时间
     */
    private Date accountTime;

    /**
     * 收单时间
     */
    private Date checkoutTime;

    /**
     * 失败时间
     */
    private Date failTime;

    /**
     * 产品分组ID
     */
    private Integer servProductGroupId;

    /**
     * 标签
     */
    private List<WorkTagDTO> tagList;

    /**
     * 尾款验收状态 1 待验收  2 验收成功  3验收失败 4 无需验收
     */
    private Integer paymentAcceptanceResultStatus;

    /**
     * 尾款验收操作时间
     */
    private Date paymentOperateTime;

    /**
     * 尾款验收id
     */
    private Long paymentAcceptanceId;

    /**
     * 是否需要用户验收，0不需要，1需要
     */
    private Integer hasAcceptance;

    /**
     * 需要邀评指引 1否 2是
     */
    private Integer needGuideInviteComment;

    /**
     * 邀评信息
     */
    private String inviteCommentInfo;
    /**
     * 多次上门
     */
    private List<OrderVisitDTO> orderVisitList;

    /**
     * 进度款
     */
    private List<AmountDTO> amountList;

    /**
     * 是否发起收款，默认1不需要，2需要
     */
    private Integer multipleAmount;

    /**
     * 是否展示拉修/待件按钮，默认1不展示，2展示
     */
    private Integer deliveryWaitPart;

    /**
     * 是否展示定金按钮，默认1不需要，2需要
     */
    private Integer showDeposit;

    /**
     * 上门子状态 默认0
     * @see com.zmn.oms.common.constant.OrderVisitStatusConsts#ORDER_VISIT_STATUS_APPLY
     */
    private Integer multipleVisitStatus;

    /**
     * 上门支付子状态
     */
    private Integer multiplePayStatus;

    /**
     * 特殊渠道支付
     */
    private Integer specialChannelPay;

    /**
     * 微信公众号扫码用户
     */
    private Long weChatScanUserId;

    /**
     * 是否需要用户验收，1否，2是
     */
    private Integer needAcceptance;

    /**
     * 是否存在工程师验收检测项目，1否，2是
     */
    private Integer acceptMaintainStatus;

    /**
     * 服务项关联配件二级分类id（计价器3.0参数）
     */
    private List<Integer> partSubCategTwoIdList;

    /**
     * 是否支持退款，1否，2是
     */
    private Integer supportRefund;

    /**
     * 可用权益卡（次卡）数量
     */
    private Integer availableTimesCardNum;

    /**
     * 计价器故障信息
     */
    private List<FaultDRO> faultList;

    /**
     * 配件使用类型
     * 1.未使用配件
     * 2.已使用，资料完善
     * 3.已使用，缺少对比照
     */
    private Integer partUseType;

    /**
     * 下单支付类型
     * @see com.zmn.oms.common.enums.PaceanOrderPayTypeEnum
     */
    private Integer paceanOrderPayType;

    /**
     * 下单项目类型
     */
    private String paceanOrderItemTypeName;

    /**
     * 配件操作提示消息
     */
    @ApiModelProperty("配件操作提示消息")
    private String partMsg;

    /**
     * 美团预约优惠状态
     * @see DiscountConsts#WRITE_OFF_STATUS_WAIT
     */
    private Integer meiTuanWriteOffStatus;

    /**
     * 预估收入金额
     */
    @ApiModelProperty("预估收入金额")
    private Integer forecastTotalAmount;
    /**
     * 派单时间
     */
    @ApiModelProperty("派单时间")
    private Date distributeTime;

    /**
     * 优惠预付金额
     */
    @ApiModelProperty("优惠预付金额")
    private Integer payDiscountAmount;

    /**
     * 是否关注公众号
     */
    @ApiModelProperty("是否关注公众号")
    private Boolean attentionWechat;

/**
     * 图片地址
     */
    private String newTipSrc;


    /**
     * 外呼电话
     */
    private String calledNumber;

    /**
     * 外部店铺id
     */
    private String externalShopId;

    /**
     * 是否进入清洁页面
     */
    private Boolean enterCleanPage;

    @ApiModelProperty("是否走服务订单流程")
    private Integer serviceOrderProcess = com.zmn.consts.GlobalConsts.NO;
}
